package jmine.tec.datadigester.positional.writer;

import java.text.ParseException;
import java.text.SimpleDateFormat;

import jmine.tec.datadigester.positional.meta.PositionalDateFieldMetadata;
import bancosys.tec.utils.date.Date;

/**
 * {@link PositionalFieldWriter} para campos do tipo Date
 * 
 * @author israel.crisanto
 */
public class DatePositionalFieldWriter extends AbstractPositionalFieldWriter<PositionalDateFieldMetadata> {

    /**
     * Construtor
     * 
     * @param fieldMetadata fieldMetadata
     */
    public DatePositionalFieldWriter(PositionalDateFieldMetadata fieldMetadata) {
        super(fieldMetadata);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public Object read(String line) {
        PositionalDateFieldMetadata meta = this.getFieldMetadata();
        String data = line.substring(meta.start(), meta.start() + meta.size());
        return this.convertToDate(data, meta.format());
    }

    /**
     * Converte uma String em um {@link Date}, de acordo com o pattern passado como parâmetro.
     * 
     * @param date a String a ser convertida.
     * @param pattern o pattern
     * @return bancosys.tec.utils.date.Date convertido ou <tt>null</tt>, caso ocorra algum problema.
     */
    private Date convertToDate(String date, String pattern) {
        SimpleDateFormat format = new SimpleDateFormat(pattern);
        try {
            return new Date(format.parse(date));
        } catch (ParseException e) {
            return null;
        }
    }

}
